CloudFront 標準ログがアップデート!新機能のパーティションやJSON出力を試してみた
2024年11月20日、Amazon CloudFront は、標準のアクセスログ機能がアップデート。
CloudWatch Logs と、Firehose へのログ配信と、
S3のログ出力もパーティション指定や、ログ項目、フォーマットのカスタマイズが可能になりました。
今回 新しい CloudFrontの標準アクセスログの S3出力設定と、機能変更、アップデート内容について、確認を試みる機会がありましたので、紹介させていただきます。
CloudFront設定画面
CloudFrontダッシュボードを利用しました
Loggingタブ
ディストリビューション設定画面に「Logging」のタブが増えました。
- 従来の標準ログ設定は「S3 Legacy」で表示されます。
設定追加
「Add」ボタンを操作
ログ出力先として以下の選択が可能になりました。
- CloudWatch Logs
- Kinesis Data Firehose
- Amazon S3
今回、ログ出力先として Amazon S3 を選択し、ログ保存用のバケットを新規に作成しました。
追加設定
「Addtional Setting」で、ログ項目、パーティション、フォーマット指定が可能になりました。
今回、以下の追加設定を行いました。
- ログ項目は、設定可能な39項目をすべて選択。
- パーティションは変数の動作確認のため、サンプルをそのまま踏襲「/folder1/{DistributionId}/folder2/{yyyy}/{MM}/{dd}/{HH}/folder3」
- Hive互換パス指定は省略
- フォーマットは「JSON」を選択
S3バケットポリシー
CloudFront のログ出力先として新規作成した S3 バケットのバケットポリシーを確認しました。
これまでの標準ログ記録(S3 Legacy)ではACL有効化が必須でしたが、今回のアップデートでバケットポリシーがサポートされ、ACL関係の設定が不要となりました。
ログ確認
パーティション指定により、ログはディストリビューションID、年、月、日、時間で階層化された状態で保存されている事を確認できました。
s3://<S3バケット名>/folder1/<ディストリビューションID>/folder2/2024/11/21/06/folder3/<ディストリビューション>.2024-11-21-06.*****.gz
S3 Select
S3に保存されたログファイル、S3 Selectを利用してクエリを実行し、ログ内容の確認を試みました。
改行区切りのJSON(JSONL)で、ログが記録されていることを確認できました。
まとめ
従来の CloudFront の標準アクセスログは、S3 バケットの指定したプレフィックス以下にフラットに保存されていました。そのため、大規模サイトで長期間ログを保存すると、膨大な数のログファイルから必要な情報を検索することが困難でした。
従来は、ログファイルを整理するために、Lambda 関数を使用してログファイルのキーを変更するなどのワークアラウンドが必要でしたが、今回のアップデートにより、パーティション機能がネイティブでサポートされたため、このようなワークアラウンドは不要になりました。
ログフォーマットとして従来のCSV(TSV)以外、JSON、Perquetがサポートされた事により、Athenaを利用したログ解析も大幅に簡略化した利用が可能になります。
ログ出力先として新しくサポートされた CloudWatchLogsを利用すれば、LogsInsightによる解析や、ログ監視の実現。Firehoseを利用する事で、ログの集約やより精度の高い分類などが実現出来る可能性があります。
CloudWatchLog、Firehose それぞれのログ投入量に応じた従量課金に注意してご利用下さい。
新しい S3 ログ記録では、バケットポリシーがサポートされ、従来必要だった ACL 設定が不要になりました。これにより、ACL 設定ミスによるリスクを回避することができます。また、Security Hub などのセキュリティツールで、CloudFront のログ記録用に使用されている S3 バケットが検出されるのを抑制することができます。
CloudFrontの標準アクセスログ、新旧のS3設定を併用して利用する事が可能です。メリットの大きい新しいログ設定、ぜひご活用ください。